#pragma once

#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>

void MyDaemon()
{
    // 1. 忽略SIGPIPE、SIGCHLD信号
    signal(SIGPIPE, SIG_IGN);
    signal(SIGCHLD, SIG_IGN);

    // 2. 让该进程不是进程组组长
    if(fork() > 0) exit(0);

    // 3. 调用setsid
    setsid();

    // 4. 标准输入、输出、错误重定向
    int nullfd = open("/dev/null", O_RDONLY | O_WRONLY);
    if(nullfd >= 0)
    {
        //std::cout << "nullfd: " << nullfd << std::endl; 
        dup2(0, nullfd);
        dup2(1, nullfd);
        dup2(2, nullfd);
        close(nullfd);
    }
    // std::cout << "nullfd: " << nullfd << std::endl; 
}